package com.ceair.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ceair.entity.ProcessDefinition;
import com.ceair.entity.request.*;
import com.ceair.entity.vo.ProcessDefinitionVO;

/**
 * <p>
 * 流程定义表 服务类
 * </p>
 *
 * @author wangbaohai
 * @since 2025-04-12
 */
public interface IProcessDefinitionService extends IService<ProcessDefinition> {

    /**
     * 保存或更新流程定义信息。
     *
     * @param processDefinitionInOrUpReq 包含流程定义的输入或更新请求对象。
     *                                   该对象应包含必要的流程定义信息，例如名称、描述、版本等。
     *                                   如果为 null，则可能会导致保存操作失败。
     * @return 返回保存后的流程定义视图对象 (ProcessDefinitionVO)。
     *         该对象包含了保存后的流程定义详细信息，例如唯一标识符、状态等。
     *         如果保存失败，则可能返回 null 或抛出异常，具体行为取决于实现逻辑。
     */
    ProcessDefinitionVO save(ProcessDefinitionInOrUpReq processDefinitionInOrUpReq);

    /**
     * 分页查询流程定义信息。
     *
     * @param req 包含查询条件的请求对象，类型为 ProcessDefinitionInOrUpReq。
     *            该对象通常包含分页参数（如页码、每页大小）以及过滤条件（如流程定义名称、状态等）。
     * @return 返回一个分页结果对象，类型为 Page<ProcessDefinition>。
     *         该对象包含符合条件的流程定义列表以及分页相关信息（如总记录数、当前页码等）。
     */
    Page<ProcessDefinition> queryProcessDefinitionWithPage(QueryProcessDefinitionReq req);

    /**
     * 获取流程定义的XML内容。
     *
     * @param queryOneProcessDefinitionReq 包含查询条件的对象，用于指定需要获取的流程定义信息。
     *                                     该对象通常包含流程定义的唯一标识符或其他筛选条件。
     * @return 返回流程定义的XML字符串。如果未找到对应的流程定义，可能返回null或空字符串，
     *         具体行为取决于实现逻辑。
     */
    String getProcessDefinitionXml(QueryOneProcessDefinitionReq queryOneProcessDefinitionReq);

    /**
     * 保存BPMN XML信息
     *
     * 该方法用于将流程定义的XML请求对象保存到系统中
     * 主要功能包括解析请求对象中的XML数据，并将其与流程定义相关的信息一起保存到数据库或其他持久化存储中
     *
     * @param saveProcessDefinitionXmlReq 包含流程定义XML数据的请求对象
     *                                   该对象应包含所有必要的信息，如流程定义ID、XML数据等
     * @return 返回一个Boolean值，表示XML数据是否成功保存
     *         如果返回true，则表示保存操作成功；如果返回false，则表示保存操作失败
     */
    Boolean saveBpmnXml(SaveProcessDefinitionXmlReq saveProcessDefinitionXmlReq);

    /**
     * 部署BPMN XML文件的函数。
     *
     * 该函数接收一个包含流程定义XML部署请求的对象，并返回部署结果。
     *
     * @param deployProcessDefinitionXmlReq 包含流程定义XML部署请求的参数对象。
     *        该对象通常包含BPMN XML文件的内容、部署的相关配置信息等。
     *
     * @return Boolean 返回部署结果。
     *         - 如果部署成功，返回true；
     *         - 如果部署失败，返回false。
     */
    Boolean deployBpmnXml(DeployProcessDefinitionXmlReq deployProcessDefinitionXmlReq);

}
